package okl.tdf.model
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.net.URLVariables;
	
	import mx.formatters.DateFormatter;
	import mx.utils.StringUtil;

	/**
	 *  Data display object - based on <code>SampleRequest<code> DTO. 
	 * Created for representing DTO in our task
	 * 
	 *  @see com.adobe.tdf.SampleRequest
	 *	@author "oleksandr.kulinchenko@gmail.com"
	 */
	public class InteractionsPerCountry extends EventDispatcher
	{
		public function InteractionsPerCountry(countryCode:String=null)
		{
			this.countryCode=countryCode;
			
			//default values
			firstResultTime = lastResultTime = new Date();
			totalCount=1;
		}
		
		private var _countryCode:String;
		
		/**
		 * The total number of interactions from each country 
		 */
		[Bindable]public var totalCount:Number;
		
		/**
		 * The time of the first result
		 */
		[Bindable]public var firstResultTime:Date;
		
		/**
		 * The time of the latest result
		 */	
		[Bindable]public var lastResultTime:Date;
		
		
		private static var MS_IN_SECOND:Number = 60 * 1000;

		/**
		 * Country code representation in tourdeflex
		 */
		[Bindable(event="countryCodeChanged")]public function get countryCode():String
		{
			return _countryCode;
		}

		/**
		 * @private
		 */
		public function set countryCode(value:String):void
		{
			_countryCode = value;
			dispatchEvent(new Event("countryCodeChanged"));
		}

		/**
		 * The duration since the first result in seconds
		 */
		public function get secondsSinceFirstResult():int{
			var now:Date = new Date();
			return Math.round((now.time-firstResultTime.time)/MS_IN_SECOND);
		}
		
		[Bindable(event="countryCodeChanged")]public function get countryName():String{
			return _countryLookupData[countryCode] || "";
		}
		
		override public function toString():String{
			return StringUtil.substitute("{0} ({1})", countryName, totalCount);
		}
		

		
		private static const _countryLookupData:URLVariables=new URLVariables("AD=Andorra&AE=United Arab Emirates&AF=Afghanistan&AG=Antigua %26 Barbuda&AI=Anguilla&AL=Albania&AM=Armenia&AN=Netherlands Antilles&AO=Angola&AQ=Antarctica&AR=Argentina&AS=American Samoa&AT=Austria&AU=Australia&AW=Aruba&AZ=Azerbaijan&BA=Bosnia and Herzegovina&BB=Barbados&BD=Bangladesh&BE=Belgium&BF=Burkina Faso&BG=Bulgaria&BH=Bahrain&BI=Burundi&BJ=Benin&BM=Bermuda&BN=Brunei Darussalam&BO=Bolivia&BR=Brazil&BS=Bahama&BT=Bhutan&BU=Burma (no longer exists)&BV=Bouvet Island&BW=Botswana&BY=Belarus&BZ=Belize&CA=Canada&CC=Cocos (Keeling) Islands&CF=Central African Republic&CG=Congo&CH=Switzerland&CI=Côte D'ivoire (Ivory Coast)&CK=Cook Iislands&CL=Chile&CM=Cameroon&CN=China&CO=Colombia&CR=Costa Rica&CS=Czechoslovakia (no longer exists)&CU=Cuba&CV=Cape Verde&CX=Christmas Island&CY=Cyprus&CZ=Czech Republic&DD=German Democratic Republic (no longer exists)&DE=Germany&DJ=Djibouti&DK=Denmark&DM=Dominica&DO=Dominican Republic&DZ=Algeria&EC=Ecuador&EE=Estonia&EG=Egypt&EH=Western Sahara&ER=Eritrea&ES=Spain&ET=Ethiopia&FI=Finland&FJ=Fiji&FK=Falkland Islands (Malvinas)&FM=Micronesia&FO=Faroe Islands&FR=France&FX=France, Metropolitan&GA=Gabon&GB=United Kingdom (Great Britain)&GD=Grenada&GE=Georgia&GF=French Guiana&GH=Ghana&GI=Gibraltar&GL=Greenland&GM=Gambia&GN=Guinea&GP=Guadeloupe&GQ=Equatorial Guinea&GR=Greece&GS=South Georgia and the South Sandwich Islands&GT=Guatemala&GU=Guam&GW=Guinea-Bissau&GY=Guyana&HK=Hong Kong&HM=Heard %26 McDonald Islands&HN=Honduras&HR=Croatia&HT=Haiti&HU=Hungary&ID=Indonesia&IE=Ireland&IL=Israel&IN=India&IO=British Indian Ocean Territory&IQ=Iraq&IR=Islamic Republic of Iran&IS=Iceland&IT=Italy&JM=Jamaica&JO=Jordan&JP=Japan&KE=Kenya&KG=Kyrgyzstan&KH=Cambodia&KI=Kiribati&KM=Comoros&KN=St. Kitts and Nevis&KP=Korea, Democratic People's Republic of&KR=Korea, Republic of&KW=Kuwait&KY=Cayman Islands&KZ=Kazakhstan&LA=Lao People's Democratic Republic&LB=Lebanon&LC=Saint Lucia&LI=Liechtenstein&LK=Sri Lanka&LR=Liberia&LS=Lesotho&LT=Lithuania&LU=Luxembourg&LV=Latvia&LY=Libyan Arab Jamahiriya&MA=Morocco&MC=Monaco&MD=Moldova, Republic of&MG=Madagascar&MH=Marshall Islands&ML=Mali&MM=Myanmar&MN=Mongolia&MO=Macau&MP=Northern Mariana Islands&MQ=Martinique&MR=Mauritania&MS=Monserrat&MT=Malta&MU=Mauritius&MV=Maldives&MW=Malawi&MX=Mexico&MY=Malaysia&MZ=Mozambique&NA=Nambia&NC=New Caledonia&NE=Niger&NF=Norfolk Island&NG=Nigeria&NI=Nicaragua&NL=Netherlands&NO=Norway&NP=Nepal&NR=Nauru&NT=Neutral Zone (no longer exists)&NU=Niue&NZ=New Zealand&OM=Oman&PA=Panama&PE=Peru&PF=French Polynesia&PG=Papua New Guinea&PH=Philippines&PK=Pakistan&PL=Poland&PM=St. Pierre %26 Miquelon&PN=Pitcairn&PR=Puerto Rico&PT=Portugal&PW=Palau&PY=Paraguay&QA=Qatar&RE=Réunion&RO=Romania&RU=Russian Federation&RW=Rwanda&SA=Saudi Arabia&SB=Solomon Islands&SC=Seychelles&SD=Sudan&SE=Sweden&SG=Singapore&SH=St. Helena&SI=Slovenia&SJ=Svalbard %26 Jan Mayen Islands&SK=Slovakia&SL=Sierra Leone&SM=San Marino&SN=Senegal&SO=Somalia&SR=Suriname&ST=Sao Tome %26 Principe&SU=Union of Soviet Socialist Republics (no longer exi&SV=El Salvador&SY=Syrian Arab Republic&SZ=Swaziland&TC=Turks %26 Caicos Islands&TD=Chad&TF=French Southern Territories&TG=Togo&TH=Thailand&TJ=Tajikistan&TK=Tokelau&TM=Turkmenistan&TN=Tunisia&TO=Tonga&TP=East Timor&TR=Turkey&TT=Trinidad %26 Tobago&TV=Tuvalu&TW=Taiwan, Province of China&TZ=Tanzania, United Republic of&UA=Ukraine&UG=Uganda&UM=United States Minor Outlying Islands&US=United States of America&UY=Uruguay&UZ=Uzbekistan&VA=Vatican City State (Holy See)&VC=St. Vincent %26 the Grenadines&VE=Venezuela&VG=British Virgin Islands&VI=United States Virgin Islands&VN=Viet Nam&VU=Vanuatu&WF=Wallis %26 Futuna Islands&WS=Samoa&YD=Democratic Yemen (no longer exists)&YE=Yemen&YT=Mayotte&YU=Yugoslavia&ZA=South Africa&ZM=Zambia&ZR=Zaire&ZW=Zimbabwe&ZZ=Unknown or unspecified country");
		
	}
	
	

}
